Modern software application architectures embrace microservices design pattern that decomposes monolithic applications into independently deployable services. This approach provides a high degree of flexibility and efficiency, e.g., by reuse of similar services. The advantages that microservice architecture provides are especially noticeable when implemented in cloud environments where they are operated by the development teams (DevOps model). The developed and deployed services can be extended with small local configuration changes, and rewired to integrate with new services to deliver additional functionality.
However, when applications are deployed by customers in a more traditional way, e.g., as packaged applications, the benefits of microservice architecture do not pay off immediately. To extend the functionality of such applications by adding new services would require code changes and reconfiguration of execution environments. Alternatively, such extensions need to be foreseen so they can be plugged in later by just changing implicitly the configuration of the corresponding execution environments. Thus, no manual rewiring would be needed that would require expert knowledge about the inner structure of the deployed applications. However, foreseeing what future functionality would be added to the deployed applications is not always possible.